package BasicPractice

//scala 数组
object collectionsPractice {

  /*Scala数组
  数组是由相同类型的元素的集合组成的数据结构。
  元素与索引相关联，索引通常为整数，用于访问或替换特定元素。
  有两种方法来定义数组：指定元素的总数，然后将值分配给元素，或者我们可以一次指定所有值。
  例子
  以下代码显示了如何创建一个可以包含三个元素的字符串数组。*/
  var books1:Array[String] = new Array[String](3)
  //这里书籍被声明为一个可以容纳三个元素的字符串数组。我们可以简化声明如下。
  var books2 = new Array[String](3)
  //定义books数组并赋值如下。
  var books = Array("Scala", "Java", "Groovy")
  //使用如下所示的命令为各个元素赋值或访问各个元素：
  def main(args: Array[String]) {
    var books = new Array[String](3)
    books(0) = "Scala"
    books(1) = "Java"
    books(2) = "Groovy"
    println(books(0))
    //数组的第一个元素的索引是数字0，最后一个元素的索引是元素的总数减去1。
  }

  /*Scala列表
  在Scala列表中，所有元素都具有类似数组的类型，但与数组不同，列表的元素不能通过赋值进行更改。
  具有类型T的元素的列表被写为List [T]。
  有两种方法来创建列表：
  以与创建数组类似的方式创建列表
  use :: cons运算符。
  例子
  首先我们将展示更传统的方法。以下代码显示了如何创建空列表。*/
  val empty1: List[Nothing] = List()
  /*注意，列表的类型是Nothing。
  我们可以创建如下列代码所示的书籍列表：*/
  val books4: List[String] = List("Scala", "Groovy", "Java")
 /* 这两个列表可以使用tailNil和::定义。
  Nil也表示空列表。
  可以使用Nil定义空列表。*/
  val empty = Nil
  //书籍列表可以使用尾部Nil和::定义，如下面的代码所示。
  val books3 = "Scala" :: ("Groovy" :: ("Java" :: Nil))
  //列表上的操作可以用head和tail方法表示，其中head返回列表的第一个元素，tail返回一个由除第一个元素之外的所有元素组成的列表。
  object Main {
    def main(args: Array[String]) {
      val books = "Scala" :: ("Groovy" :: ("Java" :: Nil))
      println(books.head )
      println(books.tail )
    }
  }


}
